package com.hx.setting.model;

import static java.lang.System.out;

/**
 * 分页类。
 * 注意:
 * <ul>
 * <li>total > 0表示不计算记录集的总数</li>
 * <li>total = 0表示计算记录集的总数</li>
 * <li>total < 0表示不使用分页</li>
 * </ul>
 * Generate Date : 2014-03-16
 * Generate Version : v3.0
 * Generate Name : Honey v3.1 Test
 * Generate User : THINK
 * JDK Version : 1.5
 */
public final class Page
{

	/** 一页的记录集数量静态常量。默认20条 */
	public static final int		PAGE_COUNT			= 20;

	/** 总的记录集数量参数名称. */
	public static final String	PAGE_TOTAL_NAME		= "total";

	/** 起始位置参数名称. */
	public static final String	PAGE_BEGIN_NAME		= "begin";

	/** 一页记录集数量参数名称. */
	public static final String	PAGE_INTERVAL_NAME	= "interval";

	/** 一页的记录集数量。默认20条 */
	private int					interval			= PAGE_COUNT;

	/** 总的记录集数量. */
	private int					total				= 0;

	/** 开始位置. */
	private int					begin				= 0;

	/** 排序字段。 */
	private String				sort;

	/** 排序方式(DESC或者ASC) */
	private Dir					dir					= Dir.DEFAULT;

	/** Lucene 排序使用 */
	private SortType			sortType			= null;

	/** 
	 * 默认的构造函数
	 * 
	 */
	public Page()
	{
		return;
	}

	/** 
	 * 构造函数
	 * @param  begin {@code   int} 开始位置(从0开始计数)
	 * 
	 */
	public Page(int begin)
	{
		this.begin = begin;
		if ( this.begin < 0 )
		{
			this.begin = 0;
		}
	}

	/** 
	 * 构造函数
	 * @param  begin {@code   int} 开始位置(从0开始计数)
	 * @param  total {@code   int} 总数量
	 * 
	 */
	public Page(int begin, int total)
	{
		this.begin = begin;
		if ( this.begin < 0 )
		{
			this.begin = 0;
		}
		this.total = total;
	}

	/** 
	 * 构造函数
	 * @param  begin {@code   int} 开始位置(从0开始计数)
	 * @param  interval {@code   int} 一页记录集数量
	 * @param  total {@code   int} 总数量
	 * 
	 */
	public Page(int begin, int interval, int total)
	{
		this.begin = begin;
		if ( this.begin < 0 )
		{
			this.begin = 0;
		}
		this.interval = interval;
		this.total = total;
	}

	/** 
	 * 设定一页记录集数量
	 * @param  interval {@code   int} 设定一页记录集数量
	 * @return
	 */
	public final void setInterval(int interval)
	{
		this.interval = interval;
	}

	/** 
	 * 获取一页记录集数量
	 * @return  int
	 */
	public final int getInterval()
	{
		return this.interval;
	}

	/** 
	 * 开始位置(从0开始计数).
	 * @param  begin {@code   int} 开始位置(从0开始计数)
	 * @return
	 */
	public final void setBegin(int begin)
	{
		this.begin = begin;
	}

	/** 
	 * 获取起始位置(从0开始计数).
	 * @return  int
	 */
	public final int getBegin()
	{
		return this.begin;
	}

	/** 
	 * 获取总的记录集数量.
	 * @return  int
	 */
	public final int getTotal()
	{
		return this.total;
	}

	/** 
	 * 设定总的记录集数量.<br>
	 * 注意:
	 * <ul>
	 * <li>total>0表示不计算记录集的总数</li>
	 * <li>total=0表示计算记录集的总数</li>
	 * <li>total<0表示不使用分页</li>
	 * </ul>
	 * @param  total {@code   int} 设定总的记录集数量
	 * @return
	 */
	public final void setTotal(int total)
	{
		this.total = total;
	}

	/** 
	 * 排序方式.
	 * @param  sort {@code   String} 排序字段
	 * @param  dir {@code   Dir} 排序方式(DESC或者ASC)
	 * @return
	 * @see    String
	 * @see    Dir
	 */
	public final void setOrderBy(String sort, Dir dir)
	{
		this.sort = sort;
		if ( dir != null )
		{
			this.dir = dir;
		}
	}

	/** 
	 * 获取排序的字段
	 * @return  String
	 */
	public final String getSort()
	{
		return this.sort;
	}

	/** 
	 * 获取排序的顺序
	 * @return  Dir
	 */
	public final Dir getDir()
	{
		return this.dir;
	}

	/** 
	 * 获取排序.
	 * @return  String
	 */
	public final String getOrderBy()
	{
		String answer = null;
		if ( this.sort != null && this.sort.length() > 0 )
		{
			answer = this.sort + " " + dir;
		}
		return answer;
	}

	/** 
	 * Lucene 排序使用
	 */
	public SortType getSortType()
	{
		return sortType;
	}

	/** 
	 * Lucene 排序使用
	 */
	public void setSortType(SortType sortType)
	{
		this.sortType = sortType;
	}

	/**
	 * Lucene 排序使用
	 */
	public enum SortType
	{
		/** 
		 * 按照文档得分排序
		 */
		SCORE( 0 ),
		/** 
		 * 按照添加文档的顺序排序
		 */
		DOC( 1 ),
		STRING( 3 ),
		INT( 4 ),
		FLOAT( 5 ),
		LONG( 6 ),
		DOUBLE( 7 ),
		SHORT( 8 ),
		BYTE( 10 );

		private final int	type;

		private SortType(int type)
		{
			this.type = type;
		}

		public int getType()
		{
			return type;
		}
	}

	/**
	 * 排序方式
	 */
	public enum Dir
	{
		/** 
		 * 默认排序
		 */
		DEFAULT( "" ),
		/** 
		 * 升序
		 */
		ASC( "ASC" ),
		/** 
		 * 降序
		 */
		DESC( "DESC" );

		private final String	dir;

		/** 
		 * @param  dir {@code   String}
		 * 
		 * @see    String
		 */
		private Dir(String dir)
		{
			this.dir = dir;
		}

		/** 
		 * @return  String
		 */
		@Override
		public String toString()
		{
			return dir;
		}
	}
}
/* Honey v3.1 Test - version:1 - OriginalChecksum:Bd0fd18a16625da5ce0e97c9b3c6951ba (do not edit this line) */
